উদাহরণ সহ Caching ব্যবহার

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এ Caching |
110
110

Spring JDBC-তে Caching ডাটাবেসের সাথে সংযুক্তির ফ্রিকোয়েন্সি এবং লোড কমাতে ব্যবহৃত হয়। Caching ডাটাবেস থেকে ফ্রিকোয়েন্টলি অ্যাক্সেস করা ডেটা স্টোর করে রাখে এবং প্রয়োজন অনুযায়ী তা দ্রুত সরবরাহ করে।

Spring JDBC-তে Caching সাধারণত Ehcache, Caffeine, Hazelcast, বা Spring Cache Abstraction ব্যবহার করে ইমপ্লিমেন্ট করা যায়।


Spring Cache Abstraction: সংক্ষিপ্ত বিবরণ

Spring Cache Abstraction একটি ফ্রেমওয়ার্ক-অ্যাগনস্টিক কনফিগারেশন প্রদান করে। এটি ডাটাবেস থেকে প্রাপ্ত ডেটাকে একটি ইন-মেমরি ক্যাশে সংরক্ষণ করে এবং পুনরায় ডেটাবেস কল এড়ায়।

Caching এর জন্য মূল ধাপগুলো:

  1. Caching লাইব্রেরি যুক্ত করা।
  2. Caching ইন্টিগ্রেশন কনফিগার করা।
  3. @Cacheable, @CachePut, এবং @CacheEvict অ্যানোটেশন ব্যবহার করা।

Caching ইমপ্লিমেন্টেশন: উদাহরণ সহ

১. ডিপেন্ডেন্সি যোগ করা

Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.x.x</version>
</dependency>

২. Caching কনফিগারেশন

Spring Boot Configuration:

Spring Boot-এ Caching চালু করতে @EnableCaching অ্যানোটেশন ব্যবহার করুন।

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("users"); // Cache name: "users"
    }
}

Ehcache Configuration:

Ehcache ব্যবহার করলে, একটি ehcache.xml ফাইল তৈরি করুন।

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.ehcache.org/v3">
    <cache alias="users">
        <heap unit="entries">100</heap>
        <expiry>
            <ttl unit="seconds">600</ttl> <!-- Cache 10 মিনিটের জন্য বৈধ -->
        </expiry>
    </cache>
</config>

Spring Integration:

@Configuration
@EnableCaching
public class EhCacheConfig {

    @Bean
    public JCacheManagerCustomizer cacheManagerCustomizer() {
        return cm -> cm.createCache("users", new MutableConfiguration<>()
                .setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ofMinutes(10)))
                .setStoreByValue(false));
    }
}

৩. DAO বা Service লেয়ারে Caching যুক্ত করা

উদাহরণ: @Cacheable ব্যবহার করে ডেটা ফেচিং

@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Cacheable(value = "users", key = "#id") // Cache data with key = id
    public User getUserById(int id) {
        String sql = "SELECT * FROM users WHERE id = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, 
            new BeanPropertyRowMapper<>(User.class));
    }
}

কোড ব্যাখ্যা:

  1. @Cacheable:
    • value: ক্যাশের নাম।
    • key: নির্দিষ্ট রেকর্ডের জন্য কী।
  2. প্রথমবার ডেটাবেস থেকে ডেটা ফেচ করা হবে এবং ক্যাশে সংরক্ষণ করা হবে। পরবর্তীবার কেবল ক্যাশ থেকে ডেটা রিটার্ন করবে।

উদাহরণ: @CacheEvict ব্যবহার করে Cache Clear

@CacheEvict(value = "users", key = "#id") // Clear cache for a specific user
public void deleteUserById(int id) {
    String sql = "DELETE FROM users WHERE id = ?";
    jdbcTemplate.update(sql, id);
}

কোড ব্যাখ্যা:

  • @CacheEvict: ডেটাবেস থেকে ডেটা ডিলিট করার পর ক্যাশ থেকে সংশ্লিষ্ট ডেটাও মুছে ফেলে।

উদাহরণ: @CachePut ব্যবহার করে Cache আপডেট

@CachePut(value = "users", key = "#user.id") // Update cache with the latest data
public User updateUser(User user) {
    String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
    jdbcTemplate.update(sql, user.getName(), user.getEmail(), user.getId());
    return user;
}

কোড ব্যাখ্যা:

  • @CachePut: ডেটাবেস এবং ক্যাশ উভয়েই নতুন ডেটা আপডেট করে।

৪. Caching এর কার্যকারিতা যাচাই

UserController Example:

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable int id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteUserById(@PathVariable int id) {
        userService.deleteUserById(id);
        return ResponseEntity.ok("User deleted and cache cleared.");
    }

    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User user) {
        user.setId(id);
        return ResponseEntity.ok(userService.updateUser(user));
    }
}

Caching এর উপকারিতা

  1. ডেটাবেস লোড কমায়: একই ডেটা বারবার ফেচ করার পরিবর্তে ক্যাশ থেকে দ্রুত সরবরাহ করা হয়।
  2. পারফরম্যান্স উন্নত করে: ইন-মেমরি স্টোরেজের কারণে ডেটা রিড/রাইট দ্রুত হয়।
  3. নেটওয়ার্ক লেটেন্সি হ্রাস করে: ডেটাবেস কলের সংখ্যা হ্রাস করে।

Caching এর সীমাবদ্ধতা

  1. স্টোরেজ লিমিটেশন: ইন-মেমরি ক্যাশে সীমিত ডেটা সংরক্ষণ করা যায়।
  2. ডেটা সিঙ্ক: ক্যাশ এবং ডেটাবেস ডেটার মধ্যে সিঙ্ক রাখতে অতিরিক্ত লজিক প্রয়োজন হতে পারে।
  3. মেমরি ব্যবহারের চাপ: বেশি ডেটা ক্যাশ করলে মেমরি ব্যবহারের চাপ বাড়ে।

উপসংহার

Spring JDBC-তে Caching ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন দ্রুত এবং কার্যকর করা যায়। @Cacheable, @CachePut, এবং @CacheEvict অ্যানোটেশন ব্যবহার করে সহজেই কাস্টমাইজড ক্যাশিং যুক্ত করা যায়। ছোট থেকে মাঝারি প্রজেক্টের জন্য এটি খুবই কার্যকর। বড় প্রজেক্টে কাস্টম Caching সমাধান বা Distributed Cache (যেমন Redis, Hazelcast) ব্যবহারের প্রয়োজন হতে পারে।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion